英創(chuàng)EM928x/EM335x/ESM335x系列主板新CAN驅(qū)動(dòng)使用說(shuō)明
12月份,英創(chuàng)對(duì)現(xiàn)主要銷售的產(chǎn)品EM928X、EM335X、ESM335X系列工控主板的CAN驅(qū)動(dòng)做了一次較大升級(jí)。主要目的是修復(fù)原有BUG,同時(shí)優(yōu)化部分邏輯,使得使用起來(lái)更加方便。
優(yōu)化內(nèi)容
1、修復(fù)了原驅(qū)動(dòng)打開(kāi)過(guò)濾器后一個(gè)可能導(dǎo)致接收丟包的BUG
EM335X及ESM335X系列主板在打開(kāi)過(guò)濾器后,CAN接收單元過(guò)少,在高速收發(fā)時(shí)可能因?yàn)閬?lái)不及收發(fā)導(dǎo)致丟包。新驅(qū)動(dòng)修改了該部分邏輯,同時(shí)定義過(guò)濾器最大數(shù)為4個(gè)。新的過(guò)濾器設(shè)置說(shuō)明請(qǐng)參考附錄《英創(chuàng)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明》過(guò)濾器設(shè)置一節(jié)。
2、增加一套新的接口函數(shù)
1)新的接口更加簡(jiǎn)潔清晰,使用起來(lái)更加方便。詳細(xì)請(qǐng)參考附錄《英創(chuàng)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明》。
2)使用統(tǒng)一標(biāo)準(zhǔn),英創(chuàng)公司計(jì)劃在之后推出的產(chǎn)品也采用該標(biāo)準(zhǔn),方便客戶在升級(jí)更換平臺(tái)時(shí)移植起來(lái)更加方便。
3)完全兼容老驅(qū)動(dòng)。新驅(qū)動(dòng)保留了老驅(qū)動(dòng)所有接口。升級(jí)之后,之前開(kāi)發(fā)的CAN應(yīng)用程序可以繼續(xù)照常使用。
3、增加對(duì)CAN總線錯(cuò)誤自動(dòng)復(fù)位功能,修改了CAN總線錯(cuò)誤處理邏輯結(jié)構(gòu)
原驅(qū)動(dòng)在CAN總線出錯(cuò)后會(huì)上報(bào)事件通知上層應(yīng)用程序,同時(shí)掛起等待上層應(yīng)用程序處理完錯(cuò)誤事件后手動(dòng)復(fù)位CAN總線。在等待期間,無(wú)法進(jìn)行CAN的收發(fā)工作。
圖 原驅(qū)動(dòng)總線錯(cuò)誤處理流程
新驅(qū)動(dòng)考慮到,實(shí)際應(yīng)用中用戶更希望在CAN錯(cuò)誤排除后,能夠盡快恢復(fù)通信。大部分時(shí)候并不需要停下來(lái)等待CAN錯(cuò)誤處理完畢。所以新驅(qū)動(dòng)在CAN總線出錯(cuò)后會(huì)自動(dòng)檢查恢復(fù)CAN總線。
圖 新驅(qū)動(dòng)總線錯(cuò)誤處理流程
4、修改CAN總線錯(cuò)誤處理模式
原驅(qū)動(dòng)需要單獨(dú)獲取CAN錯(cuò)誤事件,然后再通過(guò)接口查詢錯(cuò)誤類型,再?zèng)Q定處理方式。新驅(qū)動(dòng)做優(yōu)化修改了處理模式,使得使用起來(lái)更靈活方便。
圖 原驅(qū)動(dòng)CAN總線錯(cuò)誤處理模式
新驅(qū)動(dòng)CAN總線錯(cuò)誤信息改為通過(guò)幀形式上報(bào),用戶可以通過(guò)注冊(cè)表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1]中BusErrorReport項(xiàng)設(shè)置是否需要接收錯(cuò)誤幀,默認(rèn)不接收。
圖 新驅(qū)動(dòng)CAN總線錯(cuò)誤處理模式
錯(cuò)誤幀詳細(xì)定義見(jiàn)附錄《CAN錯(cuò)誤幀定義》。
5、修改發(fā)送邏輯
原驅(qū)動(dòng)發(fā)送指令只是將需要發(fā)送的數(shù)據(jù)幀放入發(fā)送BUFFER區(qū),只要BUFFER區(qū)未滿均返回成功,但是不代表實(shí)際發(fā)送成功。
原CAN驅(qū)動(dòng)會(huì)自動(dòng)檢查發(fā)送BUFFER區(qū)里未發(fā)送的CAN包并嘗試發(fā)送,對(duì)未發(fā)送成功的CAN包會(huì)自動(dòng)重發(fā),直到發(fā)送成功。
在CAN數(shù)據(jù)線斷開(kāi)時(shí),CAN發(fā)送指令會(huì)返回TRUE,但實(shí)際數(shù)據(jù)仍存在發(fā)送BUFFER中并未發(fā)送出去。當(dāng)CAN數(shù)據(jù)線重新連接后,BUFFER中的數(shù)據(jù)才得以發(fā)送。
圖 原驅(qū)動(dòng)CAN發(fā)送流程
新驅(qū)動(dòng)發(fā)送函數(shù)為阻塞函數(shù),超時(shí)時(shí)間默認(rèn)為1000ms,可以設(shè)置注冊(cè)表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1]中TxTimeout項(xiàng)修改該時(shí)間長(zhǎng)短。返回值為實(shí)際發(fā)送是否成功的邏輯值。
當(dāng)CAN總線錯(cuò)誤,發(fā)送失敗后,CAN驅(qū)動(dòng)不會(huì)自動(dòng)重發(fā)CAN包,所以需要應(yīng)用層自行判斷是否重發(fā)。
圖 新驅(qū)動(dòng)CAN發(fā)送流程
6、增加CAN接收BUFFER到8K,可以緩存更多CAN包
附錄
《英創(chuàng)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明》
《CAN錯(cuò)誤幀定義》
成都英創(chuàng)信息技術(shù)有限公司
http://www.emtronix.com
提交
Windows下STM32單片機(jī)eclipse編譯環(huán)境搭建
Android Studio應(yīng)用開(kāi)發(fā)簡(jiǎn)介
WinCE工控主板WiFi解決方案
敬請(qǐng)關(guān)注成都英創(chuàng)微信公眾號(hào)
WinCE工控主板通過(guò)PPI協(xié)議連接西門(mén)子PLC